iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0

有Transaction就有可能會發生Deadlock. 在RDS上發生的時候就可從LOG裡看出發生的來源與時間.

  1. 假設有兩個Transaction都對同一個做更新. 但是更新的順序有交叉.
    https://ithelp.ithome.com.tw/upload/images/20211004/200919425VvgdYwU73.png

  2. 一個Transaction先更新ID=2的內容, 再更新ID=1的內容.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942xyKUYuC1PP.png

  3. 另一個Transaction則是先更新ID=1的內容, 再更新ID=2的內容. 同時執行這兩個Transactions就會發生死結.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942LVcFOpSQMa.png

  4. 一旦發生在地端的SQL, 可從[Management] -> [SQL Server Logs]來查看原因. 但是在AWS上由於沒有權限, 因此無法從這裡的LOG查看.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942LwwmfXhXpa.png

  5. 這要回到AWS的面板上, [Databases] -> [Logs & events] -> [Download] 選取並下載Logs.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942jsQlhy1EY8.png

  6. 再使用SSMS打開LOG, 就可以看到Deadlock發生的細節.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942b0CPogtr40.png

  7. 在Transaction內, 將更新內容的順序改為一致, 就可避免發生Deadlock.
    https://ithelp.ithome.com.tw/upload/images/20211004/20091942LOCEx54Y0Q.png


上一篇
RDS Transacrion
下一篇
RDS匯入匯出
系列文
SQL / NoSQL的實作與比較30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言